Advances in semi-conductor processing and logic design have permitted an increase in the amount of logic that may be present on integrated circuit devices. As a result, computer system configurations have evolved from a single or multiple integrated circuits in a system to multiple cores and multiple logical processors present on individual integrated circuits. A processor or integrated circuit typically comprises a single processor die, where the processor die may include any number of processing elements, such as cores, threads, and/or logical processors.
In processors with multiple threads, the behavior of one thread potentially affects the behavior of another thread on the same processor core due to sharing of resources and pipelines. Often behavior of one thread creates unfairness in the usage of the shared resources and pipelines. In fact, when one thread's performance significantly changes in relation to other threads on the same core, often a large and unpredictable variability in performance from the unbalanced usage of shared resources occurs.
Threads are often executing software entities, which differ in their level of priority both from a system level and user-level perspectives. Often, highest priority software entities includes applications with deadlines, such as media applications. For example, if a first thread executing a media application is adversely affected by another thread executing a virus scan in the background, a user may experience skips or glitches, which detract from performance.
Previously, efforts have focused on maintaining fairness between threads. Yet, fair access to processing resources may not be enough to guarantee quality of service to the higher priority threads/software entities. Continuing the example above, fair access by the first and second threads to processing resources may not be enough to ensure the media application runs smoothly. As a result, higher priority threads/applications potentially require a larger unfair amount of resource to ensure efficient execution.